<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" />
<title>PySpec リファレンス</title>
<meta name="author" content="Shibukawa Yoshiki" />
<meta name="copyright" content="This document has been placed in the public domain." />
<style type="text/css">

/*
:Author: David Goodger
:Contact: goodger@users.sourceforge.net
:Date: $Date: 2005-12-18 01:56:14 +0100 (Sun, 18 Dec 2005) $
:Revision: $Revision: 4224 $
:Copyright: This stylesheet has been placed in the public domain.

Default cascading style sheet for the HTML output of Docutils.

See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/

/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
  border: 0 }

table.borderless td, table.borderless th {
  /* Override padding for "table.docutils td" with "! important".
     The right padding separates the table cells. */
  padding: 0 0.5em 0 0 ! important }

.first {
  /* Override more specific margin styles with "! important". */
  margin-top: 0 ! important }

.last, .with-subtitle {
  margin-bottom: 0 ! important }

.hidden {
  display: none }

a.toc-backref {
  text-decoration: none ;
  color: black }

blockquote.epigraph {
  margin: 2em 5em ; }

dl.docutils dd {
  margin-bottom: 0.5em }

/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
  font-weight: bold }
*/

div.abstract {
  margin: 2em 5em }

div.abstract p.topic-title {
  font-weight: bold ;
  text-align: center }

div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
  margin: 2em ;
  border: medium outset ;
  padding: 1em }

div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
  font-weight: bold ;
  font-family: sans-serif }

div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title {
  color: red ;
  font-weight: bold ;
  font-family: sans-serif }

/* Uncomment (and remove this text!) to get reduced vertical space in
   compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
  margin-bottom: 0.5em }

div.compound .compound-last, div.compound .compound-middle {
  margin-top: 0.5em }
*/

div.dedication {
  margin: 2em 5em ;
  text-align: center ;
  font-style: italic }

div.dedication p.topic-title {
  font-weight: bold ;
  font-style: normal }

div.figure {
  margin-left: 2em ;
  margin-right: 2em }

div.footer, div.header {
  clear: both;
  font-size: smaller }

div.line-block {
  display: block ;
  margin-top: 1em ;
  margin-bottom: 1em }

div.line-block div.line-block {
  margin-top: 0 ;
  margin-bottom: 0 ;
  margin-left: 1.5em }

div.sidebar {
  margin-left: 1em ;
  border: medium outset ;
  padding: 1em ;
  background-color: #ffffee ;
  width: 40% ;
  float: right ;
  clear: right }

div.sidebar p.rubric {
  font-family: sans-serif ;
  font-size: medium }

div.system-messages {
  margin: 5em }

div.system-messages h1 {
  color: red }

div.system-message {
  border: medium outset ;
  padding: 1em }

div.system-message p.system-message-title {
  color: red ;
  font-weight: bold }

div.topic {
  margin: 2em }

h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
  margin-top: 0.4em }

h1.title {
  text-align: center }

h2.subtitle {
  text-align: center }

hr.docutils {
  width: 75% }

img.align-left {
  clear: left }

img.align-right {
  clear: right }

ol.simple, ul.simple {
  margin-bottom: 1em }

ol.arabic {
  list-style: decimal }

ol.loweralpha {
  list-style: lower-alpha }

ol.upperalpha {
  list-style: upper-alpha }

ol.lowerroman {
  list-style: lower-roman }

ol.upperroman {
  list-style: upper-roman }

p.attribution {
  text-align: right ;
  margin-left: 50% }

p.caption {
  font-style: italic }

p.credits {
  font-style: italic ;
  font-size: smaller }

p.label {
  white-space: nowrap }

p.rubric {
  font-weight: bold ;
  font-size: larger ;
  color: maroon ;
  text-align: center }

p.sidebar-title {
  font-family: sans-serif ;
  font-weight: bold ;
  font-size: larger }

p.sidebar-subtitle {
  font-family: sans-serif ;
  font-weight: bold }

p.topic-title {
  font-weight: bold }

pre.address {
  margin-bottom: 0 ;
  margin-top: 0 ;
  font-family: serif ;
  font-size: 100% }

pre.literal-block, pre.doctest-block {
  margin-left: 2em ;
  margin-right: 2em ;
  background-color: #eeeeee }

span.classifier {
  font-family: sans-serif ;
  font-style: oblique }

span.classifier-delimiter {
  font-family: sans-serif ;
  font-weight: bold }

span.interpreted {
  font-family: sans-serif }

span.option {
  white-space: nowrap }

span.pre {
  white-space: pre }

span.problematic {
  color: red }

span.section-subtitle {
  /* font-size relative to parent (h1..h6 element) */
  font-size: 80% }

table.citation {
  border-left: solid 1px gray;
  margin-left: 1px }

table.docinfo {
  margin: 2em 4em }

table.docutils {
  margin-top: 0.5em ;
  margin-bottom: 0.5em }

table.footnote {
  border-left: solid 1px black;
  margin-left: 1px }

table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
  padding-left: 0.5em ;
  padding-right: 0.5em ;
  vertical-align: top }

table.docutils th.field-name, table.docinfo th.docinfo-name {
  font-weight: bold ;
  text-align: left ;
  white-space: nowrap ;
  padding-left: 0 }

h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
  font-size: 100% }

tt.docutils {
  background-color: #eeeeee }

ul.auto-toc {
  list-style-type: none }

</style>
</head>
<body>
<div class="document" id="pyspec">
<h1 class="title">PySpec リファレンス</h1>
<table class="docinfo" frame="void" rules="none">
<col class="docinfo-name" />
<col class="docinfo-content" />
<tbody valign="top">
<tr><th class="docinfo-name">Author:</th>
<td>Shibukawa Yoshiki</td></tr>
<tr><th class="docinfo-name">Contact:</th>
<td>yoshiki at shibu.jp</td></tr>
<tr><th class="docinfo-name">Copyright:</th>
<td>This document has been placed in the public domain.</td></tr>
</tbody>
</table>
<div class="contents topic">
<p class="topic-title first"><a id="contents" name="contents">Contents</a></p>
<ul class="simple">
<li><a class="reference" href="#id1" id="id5" name="id5">仕様定義デコレータ</a><ul>
<li><a class="reference" href="#spec" id="id6" name="id6"><tt class="docutils literal"><span class="pre">&#64;spec</span></tt></a></li>
<li><a class="reference" href="#context" id="id7" name="id7"><tt class="docutils literal"><span class="pre">&#64;context</span></tt></a></li>
<li><a class="reference" href="#spec-finalize" id="id8" name="id8"><tt class="docutils literal"><span class="pre">&#64;spec_finalize</span></tt></a></li>
<li><a class="reference" href="#class-context" id="id9" name="id9"><tt class="docutils literal"><span class="pre">&#64;class_context</span></tt></a></li>
<li><a class="reference" href="#class-finalize" id="id10" name="id10"><tt class="docutils literal"><span class="pre">&#64;class_finalize</span></tt></a></li>
<li><a class="reference" href="#ignore" id="id11" name="id11"><tt class="docutils literal"><span class="pre">&#64;ignore</span></tt></a></li>
</ul>
</li>
<li><a class="reference" href="#id2" id="id12" name="id12">テスト用検証メソッド</a><ul>
<li><a class="reference" href="#about-should-equal" id="id13" name="id13"><tt class="docutils literal"><span class="pre">About(実際値).should_equal(期待値)</span></tt></a></li>
<li><a class="reference" href="#about-should-equal-nearly" id="id14" name="id14"><tt class="docutils literal"><span class="pre">About(実際値).should_equal_nearly(期待値,</span> <span class="pre">誤差)</span></tt></a></li>
<li><a class="reference" href="#about-should-be-true" id="id15" name="id15"><tt class="docutils literal"><span class="pre">About(実際値).should_be_true()</span></tt></a></li>
<li><a class="reference" href="#about-should-be-same" id="id16" name="id16"><tt class="docutils literal"><span class="pre">About(実際値).should_be_same(期待値)</span></tt></a></li>
<li><a class="reference" href="#about-should-include" id="id17" name="id17"><tt class="docutils literal"><span class="pre">About(配列).should_include(要素)</span></tt></a></li>
<li><a class="reference" href="#about-should-be-in" id="id18" name="id18"><tt class="docutils literal"><span class="pre">About(実際値).should_be_in(配列)</span></tt></a></li>
<li><a class="reference" href="#about-should-be-empty" id="id19" name="id19"><tt class="docutils literal"><span class="pre">About(配列).should_be_empty()</span></tt></a></li>
<li><a class="reference" href="#verify-fail" id="id20" name="id20"><tt class="docutils literal"><span class="pre">Verify.fail()</span></tt></a></li>
<li><a class="reference" href="#verify-ignore" id="id21" name="id21"><tt class="docutils literal"><span class="pre">Verify.ignore()</span></tt></a></li>
</ul>
</li>
<li><a class="reference" href="#id3" id="id22" name="id22">簡易モックオブジェクト</a><ul>
<li><a class="reference" href="#mockobject-mockobjectrecorder" id="id23" name="id23"><tt class="docutils literal"><span class="pre">MockObject</span></tt> / <tt class="docutils literal"><span class="pre">MockObjectRecorder</span></tt></a></li>
<li><a class="reference" href="#filemockobject" id="id24" name="id24"><tt class="docutils literal"><span class="pre">FileMockObject</span></tt></a></li>
<li><a class="reference" href="#mocksocket" id="id25" name="id25"><tt class="docutils literal"><span class="pre">MockSocket</span></tt></a></li>
</ul>
</li>
<li><a class="reference" href="#id4" id="id26" name="id26">補助関数</a><ul>
<li><a class="reference" href="#dprint" id="id27" name="id27"><tt class="docutils literal"><span class="pre">dprint()</span></tt></a></li>
</ul>
</li>
</ul>
</div>
<div class="section">
<h1><a class="toc-backref" href="#id5" id="id1" name="id1">仕様定義デコレータ</a></h1>
<div class="section">
<h2><a class="toc-backref" href="#id6" id="spec" name="spec"><tt class="docutils literal"><span class="pre">&#64;spec</span></tt></a></h2>
<p>このデコレータが付くと、PySpecは検証メソッドとして扱います。
クラスのメソッド、モジュールの関数の両方に使用できます。</p>
<p>example:</p>
<pre class="literal-block">
&#64;spec
def stack_empty_behavior():
  &quot;&quot;&quot;スタックは空かどうかチェックできる&quot;&quot;&quot;
  stack = Stack()
  About(stack).should_empty()
</pre>
<table border="1" class="docutils">
<colgroup>
<col width="27%" />
<col width="73%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">パラメータ</th>
<th class="head">説明</th>
</tr>
</thead>
<tbody valign="top">
<tr><td><tt class="docutils literal"><span class="pre">expected</span></tt></td>
<td>検証で出力される例外を指定します</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">group</span></tt></td>
<td>使用する準備メソッドを指定します</td>
</tr>
</tbody>
</table>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id7" id="context" name="context"><tt class="docutils literal"><span class="pre">&#64;context</span></tt></a></h2>
<p>仕様の前提条件を設定するメソッドに指定します。JUnitで言うところの
setupメソッドになります。このコンテキストメソッドは、仕様メソッドが
呼ばれる前に呼ばれます。
PySpecでは、準備コードはなるべくこのコンテキストメソッドの中に書くことを
推奨しています。他のxUnitフレームワークよりも多くの準備メソッドを書くことに
なると思います。</p>
<p>もしもgroupパラメータを指定しなかった場合にはすべてのコンテキストメソッドが
仕様メソッドがそれぞれ実行される前に呼ばれます。</p>
<table border="1" class="docutils">
<colgroup>
<col width="22%" />
<col width="78%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">パラメータ</th>
<th class="head">説明</th>
</tr>
</thead>
<tbody valign="top">
<tr><td><tt class="docutils literal"><span class="pre">group</span></tt></td>
<td>コンテキストメソッドのグループを指定します</td>
</tr>
</tbody>
</table>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id8" id="spec-finalize" name="spec-finalize"><tt class="docutils literal"><span class="pre">&#64;spec_finalize</span></tt></a></h2>
<p>検証メソッド実行後の片づけのメソッドに指定します。JUnitで言うところの
teardownメソッドになります。それぞれの検証メソッドが呼ばれた後に呼ばれます。</p>
<table border="1" class="docutils">
<colgroup>
<col width="25%" />
<col width="75%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">パラメータ</th>
<th class="head">説明</th>
</tr>
</thead>
<tbody valign="top">
<tr><td><tt class="docutils literal"><span class="pre">group</span></tt></td>
<td>片付けメソッドのグループを指定します</td>
</tr>
</tbody>
</table>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id9" id="class-context" name="class-context"><tt class="docutils literal"><span class="pre">&#64;class_context</span></tt></a></h2>
<p>&#64;contextと似ていますが、このデコレータを指定したメソッドは、最初の検証メソッドの前に、
１度だけ実行されます。もし何か変数を設定したりする場合にはクラス変数にして
ください。</p>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id10" id="class-finalize" name="class-finalize"><tt class="docutils literal"><span class="pre">&#64;class_finalize</span></tt></a></h2>
<p>&#64;finalizeと似ていますが、このデコレータを指定したメソッドは、
最後の検証メソッドの後に、１度だけ実行されます。
このメソッドは、仕様のテストが失敗しても実行されます。</p>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id11" id="ignore" name="ignore"><tt class="docutils literal"><span class="pre">&#64;ignore</span></tt></a></h2>
<p>検証メソッドの実行を無視します。</p>
<p>example:</p>
<pre class="literal-block">
&#64;spec
&#64;ignore
def test_stack():
  # 未実装
  pass
</pre>
</div>
</div>
<div class="section">
<h1><a class="toc-backref" href="#id12" id="id2" name="id2">テスト用検証メソッド</a></h1>
<div class="section">
<h2><a class="toc-backref" href="#id13" id="about-should-equal" name="about-should-equal"><tt class="docutils literal"><span class="pre">About(実際値).should_equal(期待値)</span></tt></a></h2>
<p>値が同一である、ということを検証します。同一でないことを示す、
<tt class="docutils literal"><span class="pre">should_not_equal()</span></tt> もあります。</p>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id14" id="about-should-equal-nearly" name="about-should-equal-nearly"><tt class="docutils literal"><span class="pre">About(実際値).should_equal_nearly(期待値,</span> <span class="pre">誤差)</span></tt></a></h2>
<p>浮動小数点数の同値性テスト。値が誤差以内かどうかでテストを行います。
誤差値を省略した場合は、誤差値は期待値の1%になります。
同一でないことを示す、 <tt class="docutils literal"><span class="pre">should_not_equal_nearly()</span></tt> もあります。</p>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id15" id="about-should-be-true" name="about-should-be-true"><tt class="docutils literal"><span class="pre">About(実際値).should_be_true()</span></tt></a></h2>
<p>値がTrueかどうかを検証します。 <tt class="docutils literal"><span class="pre">should_be_false()</span></tt> もあります。</p>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id16" id="about-should-be-same" name="about-should-be-same"><tt class="docutils literal"><span class="pre">About(実際値).should_be_same(期待値)</span></tt></a></h2>
<p>両方のオブジェクトが同一( <tt class="docutils literal"><span class="pre">id()</span></tt> の返値が同一)かどうかを検証します。
<tt class="docutils literal"><span class="pre">should_not_be_same()</span></tt> もあります。</p>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id17" id="about-should-include" name="about-should-include"><tt class="docutils literal"><span class="pre">About(配列).should_include(要素)</span></tt></a></h2>
<p>指定された要素が配列に含まれるかどうかを検証します。指定できるのは、
配列( <tt class="docutils literal"><span class="pre">__contains__()</span></tt> か <tt class="docutils literal"><span class="pre">__iter__()</span></tt>
が実装されているオブジェクト)です。 <tt class="docutils literal"><span class="pre">should_not_include()</span></tt> もあります。</p>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id18" id="about-should-be-in" name="about-should-be-in"><tt class="docutils literal"><span class="pre">About(実際値).should_be_in(配列)</span></tt></a></h2>
<p>指定された要素が配列に含まれるかどうかを検証します。指定できるのは、
<tt class="docutils literal"><span class="pre">in``が使用できる配列のオブジェクトです。</span>
<span class="pre">``should_not_be_in()</span></tt> もあります。
<tt class="docutils literal"><span class="pre">About().should_include()</span></tt> と対称となるメソッドです。</p>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id19" id="about-should-be-empty" name="about-should-be-empty"><tt class="docutils literal"><span class="pre">About(配列).should_be_empty()</span></tt></a></h2>
<p>指定された配列が空かどうかを検証します。指定できるのは、配列( <tt class="docutils literal"><span class="pre">__len__()</span></tt>
が実装されているオブジェクト)です。 <tt class="docutils literal"><span class="pre">should_not_be_empty()</span></tt> もあります。</p>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id20" id="verify-fail" name="verify-fail"><tt class="docutils literal"><span class="pre">Verify.fail()</span></tt></a></h2>
<p>テストを失敗させます。実行パスが間違っているということを表明する場合に使用します:</p>
<pre class="literal-block">
&#64;spec
def exception_should_be_raised():
  try:
    do_something()
    Verify.fail()
  except ValueError:
    pass
</pre>
<p>例外を扱うことができないテスティングフレームワークでは、例外を投げる
仕様を記述するためには、このように100%失敗する表明メソッドを利用する
必要がありました。
PySpecではもっとシンプルに以下のように書くことができます:</p>
<pre class="literal-block">
&#64;spec(expect=ValueError)
def exception_should_be_raised():
  do_something()
</pre>
<p>もしこのメソッドのいい使い方を思いついた方は僕まで送って下さい。</p>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id21" id="verify-ignore" name="verify-ignore"><tt class="docutils literal"><span class="pre">Verify.ignore()</span></tt></a></h2>
<p>テストを無視させます。 <tt class="docutils literal"><span class="pre">&#64;ignore</span></tt> を指定するのと同じです。</p>
<p>example:</p>
<pre class="literal-block">
&#64;spec
def connect_to_SQLServer():
  if sys.platform != &quot;win32&quot;:
    Verify.ignore()
  do_something()
</pre>
</div>
</div>
<div class="section">
<h1><a class="toc-backref" href="#id22" id="id3" name="id3">簡易モックオブジェクト</a></h1>
<p>これらのクラスは <tt class="docutils literal"><span class="pre">pyspec.mockobject</span></tt> モジュールで定義されています。
これらはPySpec自身のテストのために実装されました。</p>
<div class="section">
<h2><a class="toc-backref" href="#id23" id="mockobject-mockobjectrecorder" name="mockobject-mockobjectrecorder"><tt class="docutils literal"><span class="pre">MockObject</span></tt> / <tt class="docutils literal"><span class="pre">MockObjectRecorder</span></tt></a></h2>
<p>この二つのクラスが基本的なモックオブジェクトのクラスになります。
これらのクラスは一緒に使用します。 <tt class="docutils literal"><span class="pre">MockObjectRecorder</span></tt> クラスによって
メソッド呼び出しを記録します。``MockObjectRecorder._get_mock_object_()``
を呼ぶと、記録済みの <tt class="docutils literal"><span class="pre">MockObject</span></tt> のオブジェクトが取得できます。
このオブジェクトを使うと、メソッド呼び出しの検証を行うことができます。</p>
<p>example:</p>
<pre class="literal-block">
recorder = MockObjectRecorder()     # まずレコーダーを作成します
recorder.add(1, 2) == 3             # このメソッドは3を返します
calc = recorder._get_mock_object_() # ここで記録終了です

print calc(1, 2)    # =&gt; 3
calc._verify_()     # もし、まだ呼ばれていないメソッドがあれば
                    # AssertionError例外を投げます
</pre>
<p><tt class="docutils literal"><span class="pre">MockObjectRecorder</span></tt> に対する操作はコンテキストメソッド中に書くのをおすすめします。
また、作成されたモックオブジェクトの <tt class="docutils literal"><span class="pre">_verify_()</span></tt> メソッド呼び出しは仕様記述
メソッドに記述してください。</p>
<p>モックオブジェクトに関するクラスの特殊なメソッドの一覧に関しては以下の表を
見て下さい。これら以外のメソッド呼び出しに関しては、レコーダーオブジェクトが
すべて記録します。</p>
<table border="1" class="docutils">
<colgroup>
<col width="38%" />
<col width="62%" />
</colgroup>
<tbody valign="top">
<tr><td><tt class="docutils literal"><span class="pre">MockObjectRecorder(is_print=False)</span></tt></td>
<td><tt class="docutils literal"><span class="pre">is_print=True</span></tt> にすると、コンソールに記録、呼び出し情報を出します</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">MockObjectRecorder._get_mock_object_()</span></tt></td>
<td>モックオブジェクトを作成して返します</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">MockObject._verify_()</span></tt></td>
<td>仕様記述メソッドの最後で呼んで下さい。</td>
</tr>
</tbody>
</table>
<p><tt class="docutils literal"><span class="pre">MockObjectRecorder</span></tt> は以下のような柔軟なメソッド呼び出しの記録をサポートしています。.</p>
<dl class="docutils">
<dt>example::</dt>
<dd>recorder = MockObjectRecorder()
recorder.add(1, 2).repeat(3) == 3    # ３回呼び出します
recorder.mul().with_any_parameter()  # どんなパラメータ呼び出しも許可します</dd>
</dl>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id24" id="filemockobject" name="filemockobject"><tt class="docutils literal"><span class="pre">FileMockObject</span></tt></a></h2>
<p>ファイル出力を検証するための、ファイルオブジェクトのモックです。
コンストラクタで指定された文字列との比較検証を行います。</p>
<p>ただし、出力メソッドのサポートは <tt class="docutils literal"><span class="pre">write()</span></tt> のみで、 <tt class="docutils literal"><span class="pre">writelines()</span></tt> や、
その他のメソッドは実装されていません。</p>
<table border="1" class="docutils">
<colgroup>
<col width="36%" />
<col width="64%" />
</colgroup>
<tbody valign="top">
<tr><td><tt class="docutils literal"><span class="pre">FileMockObject(expected_contents)</span></tt></td>
<td>期待される結果をexpected_contents(文字列)で設定する</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">write(actual)</span></tt></td>
<td>書き込みを行います。期待される結果と異なれば例外が発生します</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">_verify_()</span></tt></td>
<td>期待された結果との比較を行います。テストケースの最後に呼んで下さい</td>
</tr>
</tbody>
</table>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id25" id="mocksocket" name="mocksocket"><tt class="docutils literal"><span class="pre">MockSocket</span></tt></a></h2>
<p>ソケットオブジェクトのモックです。送受信のシミュレートを行います。
Pythonの標準ライブラリと使い方は一緒です。</p>
<p>ブロックモード、ノンブロックモードの両方に対応しています。
モードの違いは、 <tt class="docutils literal"><span class="pre">recv()</span></tt> を呼び出したときに、受信予定文字列が空になったときの挙動に影響があります。
ノンブロックモード時は <tt class="docutils literal"><span class="pre">AssertionError</span></tt> , ブロックモード時は <tt class="docutils literal"><span class="pre">socket.error</span></tt> が発生します</p>
<table border="1" class="docutils">
<colgroup>
<col width="36%" />
<col width="64%" />
</colgroup>
<tbody valign="top">
<tr><td><tt class="docutils literal"><span class="pre">MockSocket(recv=None,</span> <span class="pre">send=None)</span></tt></td>
<td>送受信の期待値を設定することができます。文字列の配列で指定します</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">_add_recv_message_(\*message)</span></tt></td>
<td>受信文字列を追加します</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">_add_send_message_(\*message)</span></tt></td>
<td>送信文字列を追加します</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="section">
<h1><a class="toc-backref" href="#id26" id="id4" name="id4">補助関数</a></h1>
<div class="section">
<h2><a class="toc-backref" href="#id27" id="dprint" name="dprint"><tt class="docutils literal"><span class="pre">dprint()</span></tt></a></h2>
<p>この関数は、デバッグ用のprint関数になります。基本的には、テストが失敗した時に、
原因を探るのに利用します。</p>
</div>
</div>
</div>
</body>
</html>
